package com.tuzhi.base.web.util;

import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class TzCollectionUtils {

    /**
     * 从二个集合中，取出要删除的项
     *
     * @param oldDatas 数据库中的记录集合
     * @param newDatas 新提交的记录集合
     * @param <E>
     * @return 返回要删除的集合
     */
    public static <E> Collection<E> getDeleteItem(Collection<E> oldDatas, Collection<E> newDatas) {
        if (oldDatas == null || oldDatas.isEmpty()) {
            return new ArrayList<E>();
        }
        Predicate<E> predicate = item -> !newDatas.contains(item);
        Collection<E> delItem = oldDatas.stream().filter(predicate).collect(Collectors.toList());
        return delItem;
    }

    /**
     * 1个集合拆分成2个集合
     *
     * @param datas 数据库中的记录集合
     * @param <E>
     * @return 返回要删除的集合
     */
    public static <E> List<List<E>> split(List<E> datas) {
        if (datas == null || datas.isEmpty()) {
            return null;
        }
        List<List<E>> list = new ArrayList<>();
        if (datas.size() == 1) {
            list.add(datas);
            return list;
        }
        int center = datas.size() / 2;
        if (datas.size() % 2 > 0) {
            //有余数，不能平分
            ++center;
        }
        List<E> list1 = datas.subList(0, center);
        list.add(list1);
        List<E> list2 = datas.subList(center, datas.size());
        list.add(list2);
        return list;
    }

    public static void main(String[] args) {
//        List<String> list = Arrays.asList("a", "b", "c", "d", "e");
//        List<String> list = Arrays.asList("a");
        List<String> list = Arrays.asList("a", "b", "c", "d");
        List<List<String>> result = split(list);

        System.out.println(result);
    }

}
